package controlador;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.IOException;

import javax.swing.DefaultListModel;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;


import negModel.*;
import vista.Mensajes;

public class ControladorVistaPistaOponente {

	private ControladorDeVentanas contVent;
	private CargarModelo modelo;
	private ListaPistas lp;
	private ListaOponentes lo;
	private Mensajes mens=new Mensajes();
	
	public ControladorVistaPistaOponente(ControladorDeVentanas contVent){
		this.contVent=contVent;
		try {
			lp= ListaPistas.cargar("ListaPistas.xml");
			lo= ListaOponentes.cargar("ListaOponentes.xml");
		} catch (IOException e) {
			e.printStackTrace();
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		}
		
		modelo=new CargarModelo();
	}
	
	private class EscuchaBotonCorrer implements ActionListener
	{	public void actionPerformed(ActionEvent e)
		{
		 double apuesta=EvaluarOponente();
		 if (contVent.ObtenerJugador().getAlgoPesos().getMonto()>=apuesta){
			 Auto autoOponente = (Auto)lo.get(contVent.ObtenerIndiceOponentes());
			 PuestaAPuntoOponente(autoOponente);
			 contVent.IniciarCarrera(apuesta,(Pista)lp.get(contVent.ObtenerIndicePistas()),autoOponente);
		 }
		 else
			 mens.sinDineroParaCarrera();
		}
	}

	public ActionListener getListenerBotonCorrer() {
		return new EscuchaBotonCorrer();
	}
	
	private class EscuchaBotonCancelar implements ActionListener
	{	public void actionPerformed(ActionEvent e)
		{
			contVent.AbrirVentanaTaller();
			contVent.ActualizarDinero();
			contVent.ActualizarVistaTallerAutos();
			contVent.OcultarVentanaPistaOponente();
		}
	}

	public ActionListener getListenerBotonCancelar() {
		return new EscuchaBotonCancelar();
	}
	
	private class EscuchaListaOponentes implements ListSelectionListener
	{	public void valueChanged(ListSelectionEvent evt)
		{
	    	contVent.ActualizarApuesta(EvaluarOponente());
	    	
		}
	}

	public ListSelectionListener getListenerListaOponentes() {
		return new EscuchaListaOponentes();
	}

	public double EvaluarOponente (){
		int indice=contVent.ObtenerIndiceOponentes();
       	if (indice>=0){
       		Auto unAuto;
    		unAuto=(Auto)lo.get(indice);
    		double promedio = (unAuto.getPerformance() + unAuto.getVelMaxima() + unAuto.getOtrasMejoras());
    		return promedio;
       		}
       	return 0;
	}
	
	private void PuestaAPuntoOponente(Auto autoOponente){
		(contVent.ObtenerTaller()).arreglarPartes(autoOponente);
		autoOponente.Resetear();
		autoOponente.CargarCombustible();
	}
	
	public DefaultListModel CargarModeloPista (){
		return modelo.CargarModeloPista(lp);
	}
	
	public DefaultListModel CargarModeloOponentes (){
		return 	modelo.CargarModeloAuto(lo);
	}
	
}
